/**
 * _MagicEventApply - _Tap 魔术事件之Tap事件
 * 2018年11月13日 17点56分
 * nico@coser.pub
 */
module.exports._init = function (){
  this._magicTap = function (e) {
    let dataset = e.currentTarget.dataset;

    let before = { bindPath, pushCache, jumpUrl, scrollTo, setJson, statusOn, statusOff};
    let after = { bindTap };

    datasetHandler.bind(this)(dataset, before, e);
    datasetHandler.bind(this)(dataset, after, e);
  }
}
/**
 * bindPath 绑定数据路径
 * @data-bind-path path 需要绑定的路径
 * @data-bind-value path 需要绑定的路径
 */
function bindPath(dataset) {
  this._saveData(dataset["bindPath"], dataset["bindValue"]);
}
/**
 * pushCache 绑定数据路径
 * @data-push-cache path 需要绑定的路径
 * @data-cache-value path 需要绑定的路径
 */
function pushCache(dataset) {
  this._saveData(dataset["pushCache"], dataset["cacheValue"]);
}
/**
 * jumpUrl 绑定数据路径
 * @data-jump-url page 需要跳转的路径 
 * @data-jump-type string 方式
 * @data-jump-data urlData 传送的方法
 * @data-jump-locker string 货仓key
 */
function jumpUrl(dataset) {
  let jumpType = dataset['jumpType'] || "navigateTo";
  let jumpData = "";
  let jumpUrl = dataset['jumpUrl'];

  if (typeof dataset['jumpLocker'] != "undefined") {
    let obj = this._getData("getData")(dataset['jumpLocker']);
    let key = (new Date()).valueOf();
    if (this._setAppjsLocker(key, obj)) {
      jumpData += '_lockerKey=' + key;
    }
  }
  jumpData += dataset['jumpData'];

  if (jumpType == "navigateBack") {
    wx[jumpType]({ delta: Number(jumpUrl) });
  } else if (jumpType == "switchTab") {
    wx[jumpType]({ url: jumpUrl});
  } else {
    wx[jumpType]({ url: jumpUrl + '?' + jumpData });
  }
}
/**
 * scrollTo 点击滑至指定位置
 * @data-scroll-to number 滑动高度
 */
function scrollTo(dataset){
  wx.pageScrollTo({ scrollTop: dataset['scrollTo'], duration: 300 })
}
/**
 * setJson 点击赋值-Json
 * @data-set-json 根据json设定值
 */
function setJson(dataset){
  let json = dataset['setJson'];
  try {
    let kv = JSON.parse(json);
    for (let path in kv) if (kv.hasOwnProperty(path)) {
      this._getData(path, kv[path]);
    }
  } catch (e) { console.log(e) }
}
/**
 * statusOn 状态量开-Json
 * @data-status-on 根据json状态量开
 */
function statusOn(dataset) {
  let onJson = dataset["statusOn"];
  try {
    let array = JSON.parse(onJson);
    for (let i = 0; i < array; i++) {
      this._saveData(array[i], 1);
    }
  } catch (e) {
    this._saveData(onJson, 1);
  }
}
/**
 * statusOff 状态量关-Json
 * @data-status-off 根据json状态量关
 */
function statusOff(dataset) {
  let offJson = dataset["statusOff"];
  try {
    let array = JSON.parse(offJson);
    for (let i = 0; i < array; i++) {
      this._saveData(array[i], 2);
    }
  } catch (e) {
    this._saveData(offJson, 2);
  }
}
/**
 * 额外点击事件
 * @data-bind-tap funName 绑定的方法 （in page context）
 */
function bindTap(dataset, e) {
  try { this[dataset["bindTap"]](e) } catch (e) { console.log(dataset["bindTap"] + " is undefined") }
}
/**
 * datasetHandler dataset处理器
 * @param array dataset 
 * @param string value
 * @param object options
 */
function datasetHandler(dataset, options, e) {
  for (let index in dataset) if (dataset.hasOwnProperty(index)) {
    if (options[index]) {
      try {
        options[index].bind(this)(dataset, e);
      } catch (e) { console.log(e) }
    }
  }
}